import gradio as gr
from backend.agent_bridge import WenxinAgent
from backend.mock_sensor import get_radar_data
from backend.database_manager import db_mgr

# 实例化智能体
my_agent = WenxinAgent()

def refresh_dashboard():
    """
    核心逻辑：
    1. 获取传感器数据
    2. 存入数据库
    3. 判断是否需要 AI 介入
    4. 获取历史记录
    5. 刷新界面
    """
    # 1. 获取数据
    data = get_radar_data()
    
    # 2. 存入数据库
    db_mgr.insert_sensor_data(data)
    
    # 3. 构造状态显示文本 (Markdown)
    status_md = f"""
    ### 📡 全屋安全雷达 (Security Radar)
    - **时间**: {data['timestamp']}
    - **监测位置**: {data['sensor_id']}
    - **当前状态**: <span style="color:{data['color']}">{data['status']}</span>
    - **环境温度**: {data['temp']} °C
    - **实时心率**: {data['heart_rate']} bpm (仅供参考)
    - **监测详情**: {data['msg']}
    """
    
    ai_msg = ""
    # 4. 触发 AI 自动响应 (场景：跌倒 或 温度过低)
    if data['fall_state'] == 1:
        # 跌倒场景 -> 触发急救建议
        prompt = f"紧急安全事件！雷达监测到跌倒！时间{data['timestamp']}，请给出紧急处理指引！"
        ai_reply = my_agent.chat(prompt)
        
        # 记录系统报警日志
        db_mgr.insert_chat_log("system_alert", ai_reply)
        
        ai_msg = f"**🚨 居家卫士自动响应:**\n{ai_reply}"
        
    elif data['temp'] < 18.0 and data['fall_state'] == 0:
        # 低温场景 -> 触发环境关怀
        prompt = f"当前室温{data['temp']}度，有点冷，请提醒老人保暖。"
        ai_reply = my_agent.chat(prompt)
        ai_msg = f"**❄️ 环境关怀提醒:**\n{ai_reply}"
        
    # 5. 获取最近的历史记录用于展示
    logs = db_mgr.get_recent_sensor_logs(5)
    log_md = "#### 📜 最近5条监测记录 (已归档)\n"
    for log in logs:
        # log结构: (time, status, hr, temp)
        log_md += f"- `{log[0]}` | {log[1]} | ❤️ {log[2]} | 🌡️ {log[3]}°C\n"

    return status_md, ai_msg, log_md

def chat_with_agent(message, history):
    """用户与智能体对话，并记录到数据库"""
    # 记录用户消息
    db_mgr.insert_chat_log("user", message)
    
    # 调用智能体
    response = my_agent.chat(message)
    
    # 记录 AI 回复
    db_mgr.insert_chat_log("ai", response)
    
    return response

# === Gradio 界面构建 ===
with gr.Blocks(title="文心守护 - 居家安全控制台", theme=gr.themes.Soft()) as demo:
    gr.Markdown("# 🛡️ 文心守护 (Wenxin Guardian) - 居家安全卫士")
    
    with gr.Row():
        # 左侧：监控面板
        with gr.Column(scale=2):
            gr.Markdown("## 🏠 居家环境与安全监测")
            
            # 状态显示区
            sensor_display = gr.Markdown("系统初始化中...请点击下方刷新按钮", elem_id="monitor_box")
            
            # AI 自动介入日志区
            ai_auto_output = gr.Markdown(label="🤖 AI 智能托管日志")
            
            # 历史记录区
            history_log_display = gr.Markdown("暂无历史数据")
            
            # 刷新按钮
            btn_refresh = gr.Button("🔄 刷新雷达状态 (写入本地数据库)", variant="primary")
            
            # 绑定事件：点击按钮 -> 刷新三个区域
            btn_refresh.click(refresh_dashboard, inputs=[], outputs=[sensor_display, ai_auto_output, history_log_display])

        # 右侧：智能体对话
        with gr.Column(scale=3):
            gr.Markdown(f"## 👮 文心安全管家 (Agent Connected)")
            chatbot = gr.ChatInterface(
                fn=chat_with_agent,
                examples=["家里现在的温度合适吗？", "如果老人不小心摔倒了该怎么办？", "讲个笑话解解闷"],
                description="我是您的居家安全助手。我可以监控环境安全、预警跌倒风险。所有数据已加密存储至本地 SQLite。"
            )

if __name__ == "__main__":
    demo.launch()